package com.imay.live.application;

import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Environment;

import com.imay.base.BaseApplication;
import com.imay.live.activity.MainActivity2;
import com.imay.live.activity.family.helper.session.SessionHelper;
import com.imay.live.session.ImayOnlineStateContentProvider;
import com.imay.live.session.NimDemoLocationProvider;
import com.netease.nim.uikit.NimUIKit;
import com.netease.nim.uikit.UserPreferences;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.SDKOptions;
import com.netease.nimlib.sdk.StatusBarNotificationConfig;
import com.netease.nimlib.sdk.auth.LoginInfo;
import com.netease.nimlib.sdk.msg.MsgService;
import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.netease.nimlib.sdk.team.constant.TeamFieldEnum;
import com.netease.nimlib.sdk.team.model.IMMessageFilter;
import com.netease.nimlib.sdk.team.model.UpdateTeamAttachment;
import com.netease.nimlib.sdk.uinfo.UserInfoProvider;

import com.imay.live.R;

import java.util.Map;

/**
 * Created by Administrator on 2017/8/25 0025.
 */

public abstract class NimApplication extends BaseApplication {

    protected void initNIMClient() {
        NIMClient.init(this, loginInfo(), options());
    }

    // 如果返回值为 null，则全部使用默认参数。
    protected SDKOptions options() {
        SDKOptions options = new SDKOptions();

        // 如果将新消息通知提醒托管给 SDK 完成，需要添加以下配置。否则无需设置。
        StatusBarNotificationConfig config = new StatusBarNotificationConfig();
        config.notificationEntrance = MainActivity2.class; // 点击通知栏跳转到该Activity
        config.notificationSmallIconId = R.mipmap.app_launcher;

        // 呼吸灯配置
        config.ledARGB = Color.GREEN;
        config.ledOnMs = 1000;
        config.ledOffMs = 1500;

        // 通知铃声的uri字符串
        config.notificationSound = "android.resource://com.imay.family/raw/msg";
        options.statusBarNotificationConfig = config;

        // 配置保存图片，文件，log 等数据的目录
        // 如果 options 中没有设置这个值，SDK 会使用下面代码示例中的位置作为 SDK 的数据目录。
        // 该目录目前包含 log, file, image, audio, video, thumb 这6个目录。
        // 如果第三方 APP 需要缓存清理功能， 清理这个目录下面个子目录的内容即可。
        String sdkPath = Environment.getExternalStorageDirectory() + "/" + getPackageName() + "/nim";
        options.sdkStorageRootPath = sdkPath;

        // 配置是否需要预下载附件缩略图，默认为 true
        options.preloadAttach = true;

        // 配置附件缩略图的尺寸大小。表示向服务器请求缩略图文件的大小
        // 该值一般应根据屏幕尺寸来确定， 默认值为 Screen.width / 2
        options.thumbnailSize = (int) getResources().getDimension(android.R.dimen.thumbnail_width);

        // 用户资料提供者, 目前主要用于提供用户资料，用于新消息通知栏中显示消息来源的头像和昵称
        options.userInfoProvider = new UserInfoProvider() {
            @Override
            public UserInfoProvider.UserInfo getUserInfo(String account) {
                return null;
            }

            @Override
            public int getDefaultIconResId() {
                return R.mipmap.app_launcher;
            }

            @Override
            public Bitmap getTeamIcon(String tid) {
                return null;
            }

            @Override
            public Bitmap getAvatarForMessageNotifier(String account) {
                return null;
            }

            @Override
            public String getDisplayNameForMessageNotifier(String account, String sessionId,
                                                           SessionTypeEnum sessionType) {
                return null;
            }
        };
        return options;
    }

    // 如果已经存在用户登录信息，返回LoginInfo，否则返回null即可
    protected LoginInfo loginInfo() {
        return null;
    }

    protected void initNim() {
        NimUIKit.init(this);

        SessionHelper.init();

        // 设置地理位置提供者。如果需要发送地理位置消息，该参数必须提供。如果不需要，可以忽略。
        NimUIKit.setLocationProvider(new NimDemoLocationProvider());

        NimUIKit.setOnlineStateContentProvider(new ImayOnlineStateContentProvider());

        NIMClient.getService(MsgService.class).registerIMMessageFilter(new IMMessageFilter() {
            @Override
            public boolean shouldIgnore(IMMessage message) {
                if ( message.getAttachment() != null) {
                    if (message.getAttachment() instanceof UpdateTeamAttachment) {
                        UpdateTeamAttachment attachment = (UpdateTeamAttachment) message.getAttachment();
                        for (Map.Entry<TeamFieldEnum, Object> field : attachment.getUpdatedFields().entrySet()) {
//                            if (field.getKey() == TeamFieldEnum.ICON) {
//                                return false; // 过滤
//                            }

                            if (field.getKey() == TeamFieldEnum.Ext_Server) {
                                return true; // 过滤
                            }

//                            if (field.getKey() == TeamFieldEnum.ICON) {
//                                return false; // 过滤
//                            }
//                            if (field.getKey() == TeamFieldEnum.Extension) {
//                                return true; // 过滤
//                            }
//                            if (field.getKey() == TeamFieldEnum.Name) {
//                                return true; // 过滤
//                            }
                        }
                    }
                }
                return false; // 不过滤
            }
        });
    }
}
